package com.hl.toolkit.framework.core.util.page;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import java.lang.reflect.Method;
import java.util.List;


/**
 * service 基类，此处放service公共方法，
 * 所有spring service必须继承该类
 * 
 * @author  薛立旷
 * @version  [1.0, 2016年6月8日]
 * @see  {@link XXX}
 * @since  [utlz/2.0]
 */
public abstract class BaseService {
	
	/** logger */
	private static final Log logger = LogFactory.getLog(BaseService.class);
	
	/** 
	 * 分页查询公共类
	 * @param instance 查询dao实例
	 * @param method 查询列表方法名
	 * @param methodTotal 查询总条数方法名
	 * @param ph 分页帮助类实例
	 * @param i 
	 * @return
	 */
	public DataGrid queryListByPage(Object instance,String method,String methodTotal,PageHelper ph)throws Exception{
		
		DataGrid dg = new DataGrid();
		
		Method mdTotal = instance.getClass().getMethod(methodTotal, PageHelper.class);
		
		int total = (int) mdTotal.invoke(instance, ph);
		
		if(total>0){

			Method md = instance.getClass().getMethod(method, PageHelper.class);
			
			
			List<?> rows =  (List<?>) md.invoke(instance, ph);
			
			dg.setTotal(total);
			
			dg.setTotalPage(total/ph.getRows() +(total%ph.getRows()>0?1:0));
			
			dg.setPage(ph.getPage());
			
			dg.setRows(rows);
			
		}
		
		return dg;
	}
	/** 
	 * 执行sql方法
	 * @param instantce persistence mapper对象
	 * @param method 执行的方法
	 * @return
	 */
	public Object excuteSql(Object instantce ,String method,Object param)throws Exception{
		Method mt = instantce.getClass().getMethod(method,param.getClass());
		Object obj = mt.invoke(instantce, param);
		return obj;
			
	}
}
